home *** CD-ROM | disk | FTP | other *** search
- #include "MP.h"
-
- /*
- mprefs will hold a shared lock on ListSem,
- mpatch will obatin a shared lock
-
- RemDNode & AddDNode must get a normal lock
- */
-
- extern struct MPSem *MPSem;
-
- void RemDNode(struct DefaultNode *DN)
- {
- if(DN)
- {
- Forbid();
- SendPrefsMsg(MP_LISTSTATUS, MPLS_UPDATING, 0);
- ObtainSemaphore(&MPSem->ListSem); // maybe shared with prefs
- ObtainSemaphore(&MPSem->NodeSem);
- Remove((struct Node *)DN);
- ReleaseSemaphore(&MPSem->NodeSem);
- ReleaseSemaphore(&MPSem->ListSem);
- Permit();
-
- SendPrefsMsg(MP_LISTSTATUS, MPLS_NORMAL, 0);
- SendPrefsMsg(MP_REMNODE,0,DN);
- FreeDNode(DN);
- }
- }
-
- void AddDNode(ULONG dest, struct DefaultNode *n)
- {
- if(dest < 4 && n)
- {
- Forbid();
- SendPrefsMsg(MP_LISTSTATUS, MPLS_UPDATING, 0);
- ObtainSemaphoreShared(&MPSem->ListSem); // maybe shared with prefs
- ObtainSemaphore(&MPSem->NodeSem);
- AddHead(&MPSem->PromotionList[dest],(struct Node *)n);
- n->Depth=max(1,n->Depth);
- ReleaseSemaphore(&MPSem->NodeSem);
- ReleaseSemaphore(&MPSem->ListSem);
- Permit();
-
- MPSem->LVActive=0;
- MPSem->CurrentList=dest;
-
- SendPrefsMsg(MP_LISTSTATUS, MPLS_NORMAL, 0);
- SendPrefsMsg(MP_NEWNODE,dest,n);
- SendPrefsMsg(MP_SAVE,0,0);
- }
- else
- FreeDNode(n);
- }
-
- struct DefaultNode *FindDNode(struct List *list,UBYTE *name)
- {
- struct DefaultNode *dn;
- UWORD l;
- UBYTE str[128],patsrc[128];
- UBYTE pat[258];
-
-
- if(IsListEmpty(list))
- {
- return(NULL);
- }
-
-
- l=0;
- if(name) // 4.55 @1
- {
- for(l=0;l<127 && name[l];l++)
- {
- str[l]=ToUpper(name[l]);
- }
- }
- str[l]=0;
-
- dn=(struct DefaultNode *)list->lh_Head;
- while(dn && dn->Def_Node.ln_Succ!=0)
- {
- for(l=0;l<127 && dn->Def_Node.ln_Name[l];l++)
- patsrc[l]=ToUpper(dn->Def_Node.ln_Name[l]);
- patsrc[l]=0;
-
- ParsePatternNoCase(patsrc,pat,258);
-
- if(MatchPatternNoCase(pat,name))
- return(dn);
- dn=(struct DefaultNode *)dn->Def_Node.ln_Succ;
- }
- return(NULL);
- }
-
-
- struct DefaultNode *Find_SMNode(struct List *list, STRPTR name, ULONG ModeID)
- {
- struct DefaultNode *dn;
- UWORD l,l2;
- UBYTE str[128],patsrc[128];
- UBYTE pat[258];
-
-
- if(IsListEmpty(list))
- {
- return(NULL);
- }
-
- l=0;
- if(name)
- {
- for(l=0;l<127 && name[l];l++)
- str[l]=ToUpper(name[l]);
-
- }
- str[l]=0;
-
- dn=(struct DefaultNode *)list->lh_Head;
- while(dn && dn->Def_Node.ln_Succ!=0)
- {
- if(ModeID!=INVALID_ID)// (4.56.8)
- {
- if((dn->OrigDisplayID == ModeID) || (dn->OrigDisplayID == (ModeID | ALL_MODES)) )
- {
- return(dn);
- }
- }
-
- l=l2=0;
-
- while(l2<126 && dn->Def_Node.ln_Name[l])
- {
- if(dn->Def_Node.ln_Name[l]==' ')
- {
- patsrc[l2]='#';
- l2++;
- }
- patsrc[l2]=ToUpper(dn->Def_Node.ln_Name[l]);
- l++;
- l2++;
- }
- patsrc[l2]=0;
-
- ParsePatternNoCase(patsrc,pat,258);
-
- if(MatchPatternNoCase(pat,name))
- return(dn);
-
- dn=(struct DefaultNode *)dn->Def_Node.ln_Succ;
- }
- return(NULL);
- }
-
- /*
- BOOL MatchString(STRPTR Pattern, STRPTR String)
- {
- struct DefaultNode *dn;
- UWORD l;
- UBYTE str[128],patsrc[128];
- UBYTE pat[258];
-
- for(l=0;l<127 && String[l];l++)
- str[l]=ToUpper(String[l]);
- str[l]=0;
-
- for(l=0;l<127 && Pattern[l];l++)
- patsrc[l]=ToUpper(Pattern[l]);
- patsrc[l]=0;
-
- ParsePatternNoCase(patsrc,pat,258);
-
- return(MatchPatternNoCase(pat,String));
- }
- */
-